NexusPi Git Node
meshchatx/src/backend/map_geo_sanitizer.py 786bddfe0aebae27a59e4e8aa7a87ae9a1163c12 (786bddfe) Text, 13.56 KB
T8b949e# SPDX-License-Identifier: 0BSD
T8b949e"""Strip remote images, NetworkLinks, and unsafe KMZ entries from map overlays."""
Tff7b72from T7ee787__future__ Tff7b72import Te6edf3annotations
Tff7b72import T7ee787json
Tff7b72import T7ee787re
Tff7b72import T7ee787zipfile
Tff7b72from T7ee787dataclasses Tff7b72import Te6edf3dataclassTb4b4b4, Te6edf3field
Tff7b72from T7ee787io Tff7b72import Te6edf3BytesIO
Tff7b72from T7ee787xmlT7ee787.T7ee787etree Tff7b72import Te6edf3ElementTree Tff7b72as Te6edf3ET
Tff7b72from T7ee787meshchatxT7ee787.T7ee787srcT7ee787.T7ee787backendT7ee787.T7ee787map_geo_validator Tff7b72import Tb4b4b4(
Te6edf3GeoValidationErrorTb4b4b4,
Te6edf3ZIP_LOCAL_HEADERTb4b4b4,
Te6edf3sniff_formatTb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8ff_strip_nsTb4b4b4(Te6edf3tagTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72if Ta5d6ff"Ta5d6ff}Ta5d6ff" Tff7b72in Te6edf3tagTb4b4b4:
Tff7b72return Te6edf3tagTff7b72.Td2a8ffrsplitTb4b4b4(Ta5d6ff"Ta5d6ff}Ta5d6ff"Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4[Tff7b72-T79c0ff1Tb4b4b4]
Tff7b72return Te6edf3tag
Te6edf3ALLOWED_DATA_IMAGE_PREFIXES Tff7b72= Tb4b4b4(
Ta5d6ff"Ta5d6ffdata:image/png;base64,Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffdata:image/jpeg;base64,Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffdata:image/jpg;base64,Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffdata:image/gif;base64,Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffdata:image/webp;base64,Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3ALLOWED_KMZ_EXTS Tff7b72= Tffa657frozensetTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ff.kmlTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff.pngTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff.jpgTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff.jpegTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff.gifTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff.webpTa5d6ff"Tb4b4b4}Tb4b4b4)
Te6edf3REMOTE_HREF_SCHEMES Tff7b72= Tb4b4b4(
Ta5d6ff"Ta5d6ffhttp:Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffhttps:Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fffile:Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffftp:Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffjavascript:Ta5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffvbscript:Ta5d6ff"Tb4b4b4,
Tb4b4b4)
Te6edf3OVERLAY_TAGS Tff7b72= Tffa657frozensetTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffgroundoverlayTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffphotooverlayTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffscreenoverlayTa5d6ff"Tb4b4b4}Tb4b4b4)
Te6edf3DROP_TAGS Tff7b72= Tffa657frozensetTb4b4b4(Tb4b4b4{Ta5d6ff"Ta5d6ffnetworklinkTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffnetworklinkcontrolTa5d6ff"Tb4b4b4}Tb4b4b4)
Te6edf3ICON_URL_KEYS Tff7b72= Tb4b4b4(
Ta5d6ff"Ta5d6ffhrefTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffurlTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fficonTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffimageTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6fficonurlTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffmcx_icon_hrefTa5d6ff"Tb4b4b4,
Ta5d6ff"Ta5d6ffmarker-symbolTa5d6ff"Tb4b4b4,
Tb4b4b4)
Tf0883e@dataclass
Tff7b72class T56d364SanitizeResultTb4b4b4:
Te6edf3dataTb4b4b4: Tffa657bytes
Tffa657formatTb4b4b4: Tffa657str
Te6edf3strippedTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Te6edf3fieldTb4b4b4(Te6edf3default_factoryTff7b72=Tffa657listTb4b4b4)
Te6edf3feature_countTb4b4b4: Tffa657int Tff7b72= T79c0ff0
Tff7b72def Td2a8ff_looks_like_dtdTb4b4b4(Te6edf3textTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3head Tff7b72= Te6edf3textTb4b4b4[Tb4b4b4:T79c0ff4096Tb4b4b4]Tff7b72.Td2a8ffupperTb4b4b4(Tb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ff<!DOCTYPETa5d6ff" Tff7b72in Te6edf3head Tff7b72or Ta5d6ff"Ta5d6ff<!ENTITYTa5d6ff" Tff7b72in Te6edf3head
Tff7b72def Td2a8ffis_remote_hrefTb4b4b4(Te6edf3hrefTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3h Tff7b72= Tb4b4b4(Te6edf3href Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3hTb4b4b4:
Tff7b72return Tff7b72False
Te6edf3lower Tff7b72= Te6edf3hTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3lowerTff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ff//Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72True
Tff7b72return Tffa657anyTb4b4b4(Te6edf3lowerTff7b72.Td2a8ffstartswithTb4b4b4(Te6edf3sTb4b4b4) Tff7b72for Te6edf3s Tff7b72in Te6edf3REMOTE_HREF_SCHEMESTb4b4b4)
Tff7b72def Td2a8ffis_allowed_data_image_hrefTb4b4b4(Te6edf3hrefTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3h Tff7b72= Tb4b4b4(Te6edf3href Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3hTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffdata:Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72False
Te6edf3lower Tff7b72= Te6edf3hTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ff;Ta5d6ff" Tff7b72in Te6edf3lowerTb4b4b4[Tb4b4b4:T79c0ff64Tb4b4b4] Tff7b72and Ta5d6ff"Ta5d6ffbase64,Ta5d6ff" Tff7b72not Tff7b72in Te6edf3lowerTb4b4b4[Tb4b4b4:T79c0ff96Tb4b4b4]Tb4b4b4:
Tff7b72return Tff7b72False
Tff7b72return Tffa657anyTb4b4b4(Te6edf3lowerTff7b72.Td2a8ffstartswithTb4b4b4(Te6edf3pTb4b4b4) Tff7b72for Te6edf3p Tff7b72in Te6edf3ALLOWED_DATA_IMAGE_PREFIXESTb4b4b4)
Tff7b72def Td2a8ff_href_from_elementTb4b4b4(Te6edf3elTb4b4b4: Te6edf3ETTff7b72.Td2a8ffElementTb4b4b4) Tff7b72-Tff7b72> Tffa657str Tff7b72| Tff7b72NoneTb4b4b4:
Te6edf3tag Tff7b72= Te6edf3_strip_nsTb4b4b4(Te6edf3elTff7b72.Td2a8fftagTb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3tag Tff7b72in Tb4b4b4(Ta5d6ff"Ta5d6ffhrefTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffhrefhrefTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3text Tff7b72= Tb4b4b4(Te6edf3elTff7b72.Td2a8fftext Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72return Te6edf3text Tff7b72or Tff7b72None
Tff7b72for Te6edf3keyTb4b4b4, Te6edf3val Tff7b72in Te6edf3elTff7b72.Td2a8ffattribTff7b72.Td2a8ffitemsTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3attr Tff7b72= Te6edf3_strip_nsTb4b4b4(Te6edf3keyTb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3attr Tff7b72in Tb4b4b4(Ta5d6ff"Ta5d6ffhrefTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffxlink:hrefTa5d6ff"Tb4b4b4) Tff7b72or Te6edf3attrTff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Ta5d6ffhrefTa5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3s Tff7b72= Tffa657strTb4b4b4(Te6edf3valTb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3sTb4b4b4:
Tff7b72return Te6edf3s
Tff7b72return Tff7b72None
Tff7b72def Td2a8ff_set_href_on_elementTb4b4b4(Te6edf3elTb4b4b4: Te6edf3ETTff7b72.Td2a8ffElementTb4b4b4, Te6edf3valueTb4b4b4: Tffa657str Tff7b72| Tff7b72NoneTb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Te6edf3tag Tff7b72= Te6edf3_strip_nsTb4b4b4(Te6edf3elTff7b72.Td2a8fftagTb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3tag Tff7b72== Ta5d6ff"Ta5d6ffhrefTa5d6ff"Tb4b4b4:
Te6edf3elTff7b72.Td2a8fftext Tff7b72= Te6edf3value
Tff7b72return
Tff7b72for Te6edf3key Tff7b72in Tffa657listTb4b4b4(Te6edf3elTff7b72.Td2a8ffattribTff7b72.Td2a8ffkeysTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4:
Te6edf3attr Tff7b72= Te6edf3_strip_nsTb4b4b4(Te6edf3keyTb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3attr Tff7b72in Tb4b4b4(Ta5d6ff"Ta5d6ffhrefTa5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ffxlink:hrefTa5d6ff"Tb4b4b4) Tff7b72or Te6edf3attrTff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Ta5d6ffhrefTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3value Tff7b72is Tff7b72NoneTb4b4b4:
Tff7b72del Te6edf3elTff7b72.Td2a8ffattribTb4b4b4[Te6edf3keyTb4b4b4]
Tff7b72elseTb4b4b4:
Te6edf3elTff7b72.Td2a8ffattribTb4b4b4[Te6edf3keyTb4b4b4] Tff7b72= Te6edf3value
Te6edf3_HTML_TAG_RE Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff<[^>]+>Ta5d6ff"Tb4b4b4)
Te6edf3_WS_RE Tff7b72= Te6edf3reTff7b72.Td2a8ffcompileTb4b4b4(Ta5d6ffrTa5d6ff"Ta5d6ff\Ta5d6ffs+Ta5d6ff"Tb4b4b4)
Tff7b72def Td2a8ff_flatten_html_textTb4b4b4(Te6edf3textTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Tff7b72return Te6edf3_WS_RETff7b72.Td2a8ffsubTb4b4b4(Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4, Te6edf3_HTML_TAG_RETff7b72.Td2a8ffsubTb4b4b4(Ta5d6ff"Ta5d6ff Ta5d6ff"Tb4b4b4, Te6edf3textTb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)
Tff7b72def Td2a8ff_strip_description_htmlTb4b4b4(Te6edf3elTb4b4b4: Te6edf3ETTff7b72.Td2a8ffElementTb4b4b4) Tff7b72-Tff7b72> Tffa657boolTb4b4b4:
Te6edf3tag Tff7b72= Te6edf3_strip_nsTb4b4b4(Te6edf3elTff7b72.Td2a8fftagTb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3tag Tff7b72!= Ta5d6ff"Ta5d6ffdescriptionTa5d6ff"Tb4b4b4:
Tff7b72return Tff7b72False
Te6edf3texts Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72if Te6edf3elTff7b72.Td2a8fftext Tff7b72and Te6edf3elTff7b72.Td2a8fftextTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3textsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3elTff7b72.Td2a8fftextTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3had_children Tff7b72= Tff7b72False
Tff7b72for Te6edf3child Tff7b72in Tffa657listTb4b4b4(Te6edf3elTb4b4b4)Tb4b4b4:
Te6edf3had_children Tff7b72= Tff7b72True
Tff7b72if Te6edf3childTff7b72.Td2a8fftext Tff7b72and Te6edf3childTff7b72.Td2a8fftextTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3textsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3childTff7b72.Td2a8fftextTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4)
Tff7b72if Te6edf3childTff7b72.Td2a8fftail Tff7b72and Te6edf3childTff7b72.Td2a8fftailTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3textsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3childTff7b72.Td2a8fftailTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tb4b4b4)
Te6edf3elTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3childTb4b4b4)
Te6edf3combined Tff7b72= Ta5d6ff"Ta5d6ff Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3textsTb4b4b4)
Te6edf3changed Tff7b72= Te6edf3had_children
Tff7b72if Ta5d6ff"Ta5d6ff<Ta5d6ff" Tff7b72in Te6edf3combined Tff7b72and Ta5d6ff"Ta5d6ff>Ta5d6ff" Tff7b72in Te6edf3combinedTb4b4b4:
Te6edf3combined Tff7b72= Te6edf3_flatten_html_textTb4b4b4(Te6edf3combinedTb4b4b4)
Te6edf3changed Tff7b72= Tff7b72True
Te6edf3elTff7b72.Td2a8fftext Tff7b72= Te6edf3combined Tff7b72or Tff7b72None
Tff7b72return Te6edf3changed
Tff7b72def Td2a8ff_walk_strip_kmlTb4b4b4(
Te6edf3elTb4b4b4: Te6edf3ETTff7b72.Td2a8ffElementTb4b4b4,
Te6edf3strippedTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4,
Tff7b72*Tb4b4b4,
Te6edf3zip_local_okTb4b4b4: Tffa657boolTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72for Te6edf3child Tff7b72in Tffa657listTb4b4b4(Te6edf3elTb4b4b4)Tb4b4b4:
Te6edf3tag Tff7b72= Te6edf3_strip_nsTb4b4b4(Te6edf3childTff7b72.Td2a8fftagTb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3tag Tff7b72in Te6edf3DROP_TAGSTb4b4b4:
Te6edf3strippedTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ffnetwork_linkTa5d6ff"Tb4b4b4)
Te6edf3elTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3childTb4b4b4)
Tff7b72continue
Tff7b72if Te6edf3tag Tff7b72in Te6edf3OVERLAY_TAGSTb4b4b4:
Te6edf3hrefs Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3sub Tff7b72in Te6edf3childTff7b72.Td2a8ffiterTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3h Tff7b72= Te6edf3_href_from_elementTb4b4b4(Te6edf3subTb4b4b4)
Tff7b72if Te6edf3hTb4b4b4:
Te6edf3hrefsTff7b72.Td2a8ffappendTb4b4b4(Te6edf3hTb4b4b4)
Tff7b72if Tffa657anyTb4b4b4(
Te6edf3is_remote_hrefTb4b4b4(Te6edf3hTb4b4b4)
Tff7b72or Tb4b4b4(
Te6edf3hTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffdata:Ta5d6ff"Tb4b4b4)
Tff7b72and Tff7b72not Te6edf3is_allowed_data_image_hrefTb4b4b4(Te6edf3hTb4b4b4)
Tb4b4b4)
Tff7b72for Te6edf3h Tff7b72in Te6edf3hrefs
Tb4b4b4)Tb4b4b4:
Te6edf3strippedTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ffremote_overlayTa5d6ff"Tb4b4b4)
Te6edf3elTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3childTb4b4b4)
Tff7b72continue
Tff7b72if Tffa657anyTb4b4b4(Te6edf3is_remote_hrefTb4b4b4(Te6edf3hTb4b4b4) Tff7b72for Te6edf3h Tff7b72in Te6edf3hrefsTb4b4b4)Tb4b4b4:
Te6edf3strippedTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ffremote_overlayTa5d6ff"Tb4b4b4)
Te6edf3elTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3childTb4b4b4)
Tff7b72continue
Tff7b72if Tff7b72not Te6edf3zip_local_okTb4b4b4:
Te6edf3non_data Tff7b72= Tb4b4b4[Te6edf3h Tff7b72for Te6edf3h Tff7b72in Te6edf3hrefs Tff7b72if Te6edf3h Tff7b72and Tff7b72not Te6edf3is_allowed_data_image_hrefTb4b4b4(Te6edf3hTb4b4b4)Tb4b4b4]
Tff7b72if Te6edf3non_dataTb4b4b4:
Te6edf3strippedTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ffremote_overlayTa5d6ff"Tb4b4b4)
Te6edf3elTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3childTb4b4b4)
Tff7b72continue
Tff7b72if Te6edf3_strip_description_htmlTb4b4b4(Te6edf3childTb4b4b4)Tb4b4b4:
Te6edf3strippedTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ffhtml_descriptionTa5d6ff"Tb4b4b4)
Te6edf3href Tff7b72= Te6edf3_href_from_elementTb4b4b4(Te6edf3childTb4b4b4)
Tff7b72if Te6edf3href Tff7b72is Tff7b72not Tff7b72NoneTb4b4b4:
Tff7b72if Te6edf3is_allowed_data_image_hrefTb4b4b4(Te6edf3hrefTb4b4b4)Tb4b4b4:
Tff7b72pass
Tff7b72elif Te6edf3is_remote_hrefTb4b4b4(Te6edf3hrefTb4b4b4) Tff7b72or Te6edf3hrefTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffdata:Ta5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3strippedTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ffremote_hrefTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3_strip_nsTb4b4b4(Te6edf3childTff7b72.Td2a8fftagTb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffhrefTa5d6ff"Tb4b4b4:
Te6edf3elTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3childTb4b4b4)
Tff7b72continue
Te6edf3_set_href_on_elementTb4b4b4(Te6edf3childTb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72elif Tff7b72not Te6edf3zip_local_okTb4b4b4:
Te6edf3strippedTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ffremote_hrefTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3_strip_nsTb4b4b4(Te6edf3childTff7b72.Td2a8fftagTb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffhrefTa5d6ff"Tb4b4b4:
Te6edf3elTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3childTb4b4b4)
Tff7b72continue
Te6edf3_set_href_on_elementTb4b4b4(Te6edf3childTb4b4b4, Tff7b72NoneTb4b4b4)
Te6edf3_walk_strip_kmlTb4b4b4(Te6edf3childTb4b4b4, Te6edf3strippedTb4b4b4, Te6edf3zip_local_okTff7b72=Te6edf3zip_local_okTb4b4b4)
Tff7b72def Td2a8ff_count_placemarksTb4b4b4(Te6edf3rootTb4b4b4: Te6edf3ETTff7b72.Td2a8ffElementTb4b4b4) Tff7b72-Tff7b72> Tffa657intTb4b4b4:
Tff7b72return Tffa657sumTb4b4b4(T79c0ff1 Tff7b72for Te6edf3el Tff7b72in Te6edf3rootTff7b72.Td2a8ffiterTb4b4b4(Tb4b4b4) Tff7b72if Te6edf3_strip_nsTb4b4b4(Te6edf3elTff7b72.Td2a8fftagTb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffplacemarkTa5d6ff"Tb4b4b4)
Tff7b72def Td2a8ffsanitize_kml_bytesTb4b4b4(Te6edf3dataTb4b4b4: Tffa657bytesTb4b4b4, Tff7b72*Tb4b4b4, Te6edf3zip_local_okTb4b4b4: Tffa657bool Tff7b72= Tff7b72FalseTb4b4b4) Tff7b72-Tff7b72> Te6edf3SanitizeResultTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3text Tff7b72= Te6edf3dataTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72except Tf85149UnicodeDecodeError Tff7b72as Te6edf3excTb4b4b4:
Tff7b72raise Te6edf3GeoValidationErrorTb4b4b4(Ta5d6ff"Ta5d6ffinvalid_encodingTa5d6ff"Tb4b4b4) Tff7b72from T7ee787exc
Tff7b72if Te6edf3_looks_like_dtdTb4b4b4(Te6edf3textTb4b4b4)Tb4b4b4:
Tff7b72raise Te6edf3GeoValidationErrorTb4b4b4(Ta5d6ff"Ta5d6ffdtd_forbiddenTa5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3root Tff7b72= Te6edf3ETTff7b72.Td2a8fffromstringTb4b4b4(Te6edf3textTb4b4b4)
Tff7b72except Te6edf3ETTff7b72.Td2a8ffParseError Tff7b72as Te6edf3excTb4b4b4:
Tff7b72raise Te6edf3GeoValidationErrorTb4b4b4(Ta5d6ff"Ta5d6ffinvalid_kmlTa5d6ff"Tb4b4b4) Tff7b72from T7ee787exc
Tff7b72if Te6edf3_strip_nsTb4b4b4(Te6edf3rootTff7b72.Td2a8fftagTb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4) Tff7b72!= Ta5d6ff"Ta5d6ffkmlTa5d6ff"Tb4b4b4:
Tff7b72raise Te6edf3GeoValidationErrorTb4b4b4(Ta5d6ff"Ta5d6ffinvalid_kmlTa5d6ff"Tb4b4b4)
Te6edf3strippedTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3_walk_strip_kmlTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3strippedTb4b4b4, Te6edf3zip_local_okTff7b72=Te6edf3zip_local_okTb4b4b4)
Te6edf3count Tff7b72= Te6edf3_count_placemarksTb4b4b4(Te6edf3rootTb4b4b4)
Tff7b72if Te6edf3count Tff7b72== T79c0ff0 Tff7b72and Ta5d6ff"Ta5d6ffnetwork_linkTa5d6ff" Tff7b72in Te6edf3strippedTb4b4b4:
Tff7b72raise Te6edf3GeoValidationErrorTb4b4b4(Ta5d6ff"Ta5d6ffremote_contentTa5d6ff"Tb4b4b4)
Te6edf3out Tff7b72= Te6edf3ETTff7b72.Td2a8fftostringTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4, Te6edf3xml_declarationTff7b72=Tff7b72TrueTb4b4b4)
Tff7b72return Te6edf3SanitizeResultTb4b4b4(
Te6edf3dataTff7b72=Te6edf3outTb4b4b4, Tffa657formatTff7b72=Ta5d6ff"Ta5d6ffkmlTa5d6ff"Tb4b4b4, Te6edf3strippedTff7b72=Te6edf3strippedTb4b4b4, Te6edf3feature_countTff7b72=Te6edf3count
Tb4b4b4)
Tff7b72def Td2a8ff_retain_kmz_local_hrefsTb4b4b4(
Te6edf3elTb4b4b4: Te6edf3ETTff7b72.Td2a8ffElementTb4b4b4,
Te6edf3kml_nameTb4b4b4: Tffa657strTb4b4b4,
Te6edf3keptTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Tffa657bytesTb4b4b4]Tb4b4b4,
Te6edf3referencedTb4b4b4: Tffa657setTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4,
Te6edf3strippedTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72for Te6edf3child Tff7b72in Tffa657listTb4b4b4(Te6edf3elTb4b4b4)Tb4b4b4:
Te6edf3href Tff7b72= Te6edf3_href_from_elementTb4b4b4(Te6edf3childTb4b4b4)
Tff7b72if Te6edf3href Tff7b72and Tff7b72not Te6edf3is_allowed_data_image_hrefTb4b4b4(Te6edf3hrefTb4b4b4) Tff7b72and Tff7b72not Te6edf3is_remote_hrefTb4b4b4(Te6edf3hrefTb4b4b4)Tb4b4b4:
Te6edf3resolved Tff7b72= Te6edf3_resolve_zip_hrefTb4b4b4(Te6edf3kml_nameTb4b4b4, Te6edf3hrefTb4b4b4)
Te6edf3ext Tff7b72= Te6edf3_zip_entry_extTb4b4b4(Te6edf3resolvedTb4b4b4) Tff7b72if Te6edf3resolved Tff7b72else Ta5d6ff"Ta5d6ff"
Tff7b72if Tb4b4b4(
Te6edf3resolved Tff7b72is Tff7b72None
Tff7b72or Te6edf3resolved Tff7b72not Tff7b72in Te6edf3kept
Tff7b72or Te6edf3ext Tff7b72not Tff7b72in Tb4b4b4(Te6edf3ALLOWED_KMZ_EXTS Tff7b72- Tb4b4b4{Ta5d6ff"Ta5d6ff.kmlTa5d6ff"Tb4b4b4}Tb4b4b4)
Tb4b4b4)Tb4b4b4:
Te6edf3strippedTff7b72.Td2a8ffappendTb4b4b4(
Ta5d6ff"Ta5d6ffunsafe_kmz_entryTa5d6ff"
Tff7b72if Te6edf3resolved Tff7b72and Te6edf3resolved Tff7b72in Te6edf3kept
Tff7b72else Ta5d6ff"Ta5d6ffremote_hrefTa5d6ff"
Tb4b4b4)
Tff7b72if Te6edf3_strip_nsTb4b4b4(Te6edf3childTff7b72.Td2a8fftagTb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4) Tff7b72== Ta5d6ff"Ta5d6ffhrefTa5d6ff"Tb4b4b4:
Te6edf3elTff7b72.Td2a8ffremoveTb4b4b4(Te6edf3childTb4b4b4)
Tff7b72continue
Te6edf3_set_href_on_elementTb4b4b4(Te6edf3childTb4b4b4, Tff7b72NoneTb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3referencedTff7b72.Td2a8ffaddTb4b4b4(Te6edf3resolvedTb4b4b4)
Te6edf3_retain_kmz_local_hrefsTb4b4b4(Te6edf3childTb4b4b4, Te6edf3kml_nameTb4b4b4, Te6edf3keptTb4b4b4, Te6edf3referencedTb4b4b4, Te6edf3strippedTb4b4b4)
Tff7b72def Td2a8ff_zip_entry_extTb4b4b4(Te6edf3nameTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657strTb4b4b4:
Te6edf3lower Tff7b72= Te6edf3nameTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Tffea00\\Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ff.Ta5d6ff" Tff7b72not Tff7b72in Te6edf3lowerTff7b72.Td2a8ffrsplitTb4b4b4(Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4[Tff7b72-T79c0ff1Tb4b4b4]Tb4b4b4:
Tff7b72return Ta5d6ff"Ta5d6ff"
Tff7b72return Ta5d6ff"Ta5d6ff.Ta5d6ff" Tff7b72+ Te6edf3lowerTff7b72.Td2a8ffrsplitTb4b4b4(Ta5d6ff"Ta5d6ff.Ta5d6ff"Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4[Tff7b72-T79c0ff1Tb4b4b4]
Tff7b72def Td2a8ffsanitize_kmz_bytesTb4b4b4(Te6edf3dataTb4b4b4: Tffa657bytesTb4b4b4) Tff7b72-Tff7b72> Te6edf3SanitizeResultTb4b4b4:
Tff7b72if Tff7b72not Te6edf3dataTff7b72.Td2a8ffstartswithTb4b4b4(Te6edf3ZIP_LOCAL_HEADERTb4b4b4)Tb4b4b4:
Tff7b72raise Te6edf3GeoValidationErrorTb4b4b4(Ta5d6ff"Ta5d6ffinvalid_kmzTa5d6ff"Tb4b4b4)
Tff7b72tryTb4b4b4:
Te6edf3zf Tff7b72= Te6edf3zipfileTff7b72.Td2a8ffZipFileTb4b4b4(Te6edf3BytesIOTb4b4b4(Te6edf3dataTb4b4b4)Tb4b4b4)
Tff7b72except Te6edf3zipfileTff7b72.Td2a8ffBadZipFile Tff7b72as Te6edf3excTb4b4b4:
Tff7b72raise Te6edf3GeoValidationErrorTb4b4b4(Ta5d6ff"Ta5d6ffinvalid_kmzTa5d6ff"Tb4b4b4) Tff7b72from T7ee787exc
Te6edf3strippedTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72with Te6edf3zfTb4b4b4:
Te6edf3infos Tff7b72= Tb4b4b4[Te6edf3i Tff7b72for Te6edf3i Tff7b72in Te6edf3zfTff7b72.Td2a8ffinfolistTb4b4b4(Tb4b4b4) Tff7b72if Tff7b72not Te6edf3iTff7b72.Td2a8ffis_dirTb4b4b4(Tb4b4b4)Tb4b4b4]
Te6edf3kml_name Tff7b72= Tff7b72None
Te6edf3keptTb4b4b4: Tffa657dictTb4b4b4[Tffa657strTb4b4b4, Tffa657bytesTb4b4b4] Tff7b72= Tb4b4b4{Tb4b4b4}
Tff7b72for Te6edf3info Tff7b72in Te6edf3infosTb4b4b4:
Te6edf3name Tff7b72= Te6edf3infoTff7b72.Td2a8fffilenameTff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Tffea00\\Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4)
Tff7b72if Ta5d6ff"Ta5d6ff..Ta5d6ff" Tff7b72in Te6edf3nameTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72raise Te6edf3GeoValidationErrorTb4b4b4(Ta5d6ff"Ta5d6ffpath_traversalTa5d6ff"Tb4b4b4)
Te6edf3ext Tff7b72= Te6edf3_zip_entry_extTb4b4b4(Te6edf3nameTb4b4b4)
Tff7b72if Te6edf3ext Tff7b72not Tff7b72in Te6edf3ALLOWED_KMZ_EXTSTb4b4b4:
T8b949e# ArcGIS KMZ exports include unused .xsl balloon stylesheets.
T8b949e# Drop sidecars instead of rejecting the archive.
Te6edf3strippedTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ffskipped_kmz_entryTa5d6ff"Tb4b4b4)
Tff7b72continue
Te6edf3payload Tff7b72= Te6edf3zfTff7b72.Td2a8ffreadTb4b4b4(Te6edf3infoTff7b72.Td2a8fffilenameTb4b4b4)
Te6edf3keptTb4b4b4[Te6edf3nameTb4b4b4] Tff7b72= Te6edf3payload
Te6edf3lower Tff7b72= Te6edf3nameTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72if Te6edf3lowerTff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Ta5d6ff.kmlTa5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72if Te6edf3kml_name Tff7b72is Tff7b72None Tff7b72or Te6edf3lowerTff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Ta5d6ffdoc.kmlTa5d6ff"Tb4b4b4) Tff7b72or Te6edf3lower Tff7b72== Ta5d6ff"Ta5d6ffdoc.kmlTa5d6ff"Tb4b4b4:
Tff7b72if Tb4b4b4(
Te6edf3lower Tff7b72== Ta5d6ff"Ta5d6ffdoc.kmlTa5d6ff"
Tff7b72or Te6edf3lowerTff7b72.Td2a8ffendswithTb4b4b4(Ta5d6ff"Ta5d6ff/doc.kmlTa5d6ff"Tb4b4b4)
Tff7b72or Te6edf3kml_name Tff7b72is Tff7b72None
Tb4b4b4)Tb4b4b4:
Te6edf3kml_name Tff7b72= Te6edf3name
Tff7b72if Tff7b72not Te6edf3kml_nameTb4b4b4:
Tff7b72raise Te6edf3GeoValidationErrorTb4b4b4(Ta5d6ff"Ta5d6ffkmz_missing_kmlTa5d6ff"Tb4b4b4)
Te6edf3kml_result Tff7b72= Te6edf3sanitize_kml_bytesTb4b4b4(Te6edf3keptTb4b4b4[Te6edf3kml_nameTb4b4b4]Tb4b4b4, Te6edf3zip_local_okTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3strippedTff7b72.Td2a8ffextendTb4b4b4(Te6edf3kml_resultTff7b72.Td2a8ffstrippedTb4b4b4)
Te6edf3root Tff7b72= Te6edf3ETTff7b72.Td2a8fffromstringTb4b4b4(Te6edf3kml_resultTff7b72.Td2a8ffdataTb4b4b4)
Te6edf3referencedTb4b4b4: Tffa657setTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tffa657setTb4b4b4(Tb4b4b4)
Te6edf3_retain_kmz_local_hrefsTb4b4b4(
Te6edf3rootTb4b4b4,
Te6edf3kml_nameTb4b4b4,
Te6edf3keptTb4b4b4,
Te6edf3referencedTb4b4b4,
Te6edf3strippedTb4b4b4,
Tb4b4b4)
Te6edf3kml_bytes Tff7b72= Te6edf3ETTff7b72.Td2a8fftostringTb4b4b4(Te6edf3rootTb4b4b4, Te6edf3encodingTff7b72=Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4, Te6edf3xml_declarationTff7b72=Tff7b72TrueTb4b4b4)
Te6edf3out_buf Tff7b72= Te6edf3BytesIOTb4b4b4(Tb4b4b4)
Tff7b72with Te6edf3zipfileTff7b72.Td2a8ffZipFileTb4b4b4(Te6edf3out_bufTb4b4b4, Ta5d6ff"Ta5d6ffwTa5d6ff"Tb4b4b4, Te6edf3compressionTff7b72=Te6edf3zipfileTff7b72.Td2a8ffZIP_DEFLATEDTb4b4b4) Tff7b72as Te6edf3out_zfTb4b4b4:
Te6edf3out_zfTff7b72.Td2a8ffwritestrTb4b4b4(Ta5d6ff"Ta5d6ffdoc.kmlTa5d6ff"Tb4b4b4, Te6edf3kml_bytesTb4b4b4)
Tff7b72for Te6edf3path Tff7b72in Tffa657sortedTb4b4b4(Te6edf3referencedTb4b4b4)Tb4b4b4:
Te6edf3out_zfTff7b72.Td2a8ffwritestrTb4b4b4(Te6edf3pathTb4b4b4, Te6edf3keptTb4b4b4[Te6edf3pathTb4b4b4]Tb4b4b4)
Tff7b72return Te6edf3SanitizeResultTb4b4b4(
Te6edf3dataTff7b72=Te6edf3out_bufTff7b72.Td2a8ffgetvalueTb4b4b4(Tb4b4b4)Tb4b4b4,
Tffa657formatTff7b72=Ta5d6ff"Ta5d6ffkmzTa5d6ff"Tb4b4b4,
Te6edf3strippedTff7b72=Te6edf3strippedTb4b4b4,
Te6edf3feature_countTff7b72=Te6edf3kml_resultTff7b72.Td2a8fffeature_countTb4b4b4,
Tb4b4b4)
Tff7b72def Td2a8ff_resolve_zip_hrefTb4b4b4(Te6edf3kml_pathTb4b4b4: Tffa657strTb4b4b4, Te6edf3hrefTb4b4b4: Tffa657strTb4b4b4) Tff7b72-Tff7b72> Tffa657str Tff7b72| Tff7b72NoneTb4b4b4:
Te6edf3h Tff7b72= Tb4b4b4(Te6edf3href Tff7b72or Ta5d6ff"Ta5d6ff"Tb4b4b4)Tff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Tffea00\\Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4)
Tff7b72if Tff7b72not Te6edf3h Tff7b72or Te6edf3is_remote_hrefTb4b4b4(Te6edf3hTb4b4b4) Tff7b72or Te6edf3hTff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffdata:Ta5d6ff"Tb4b4b4)Tb4b4b4:
Tff7b72return Tff7b72None
Te6edf3base Tff7b72= Te6edf3kml_pathTff7b72.Td2a8ffrsplitTb4b4b4(Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4, T79c0ff1Tb4b4b4)Tb4b4b4[T79c0ff0Tb4b4b4] Tff7b72+ Ta5d6ff"Ta5d6ff/Ta5d6ff" Tff7b72if Ta5d6ff"Ta5d6ff/Ta5d6ff" Tff7b72in Te6edf3kml_path Tff7b72else Ta5d6ff"Ta5d6ff"
Te6edf3combined Tff7b72= Tb4b4b4(Te6edf3base Tff7b72+ Te6edf3hTb4b4b4)Tff7b72.Td2a8ffreplaceTb4b4b4(Ta5d6ff"Tffea00\\Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4)
Te6edf3parts Tff7b72= Tb4b4b4[Te6edf3p Tff7b72for Te6edf3p Tff7b72in Te6edf3combinedTff7b72.Td2a8ffsplitTb4b4b4(Ta5d6ff"Ta5d6ff/Ta5d6ff"Tb4b4b4) Tff7b72if Te6edf3p Tff7b72and Te6edf3p Tff7b72!= Ta5d6ff"Ta5d6ff.Ta5d6ff"Tb4b4b4]
Te6edf3outTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Tff7b72for Te6edf3p Tff7b72in Te6edf3partsTb4b4b4:
Tff7b72if Te6edf3p Tff7b72== Ta5d6ff"Ta5d6ff..Ta5d6ff"Tb4b4b4:
Tff7b72if Tff7b72not Te6edf3outTb4b4b4:
Tff7b72return Tff7b72None
Te6edf3outTff7b72.Td2a8ffpopTb4b4b4(Tb4b4b4)
Tff7b72elseTb4b4b4:
Te6edf3outTff7b72.Td2a8ffappendTb4b4b4(Te6edf3pTb4b4b4)
Tff7b72return Ta5d6ff"Ta5d6ff/Ta5d6ff"Tff7b72.Td2a8ffjoinTb4b4b4(Te6edf3outTb4b4b4)
Tff7b72def Td2a8ff_strip_geojson_remote_urlsTb4b4b4(Te6edf3objTb4b4b4, Te6edf3strippedTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4]Tb4b4b4) Tff7b72-Tff7b72> Tff7b72NoneTb4b4b4:
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3objTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Te6edf3props Tff7b72= Te6edf3objTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6ffpropertiesTa5d6ff"Tb4b4b4)
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3propsTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3keyTb4b4b4, Te6edf3val Tff7b72in Tffa657listTb4b4b4(Te6edf3propsTff7b72.Td2a8ffitemsTb4b4b4(Tb4b4b4)Tb4b4b4)Tb4b4b4:
Tff7b72if Tff7b72not Tffa657isinstanceTb4b4b4(Te6edf3valTb4b4b4, Tffa657strTb4b4b4)Tb4b4b4:
Tff7b72continue
Te6edf3key_l Tff7b72= Tffa657strTb4b4b4(Te6edf3keyTb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)
Tff7b72if Tff7b72not Tffa657anyTb4b4b4(Te6edf3tok Tff7b72in Te6edf3key_l Tff7b72for Te6edf3tok Tff7b72in Te6edf3ICON_URL_KEYSTb4b4b4)Tb4b4b4:
Tff7b72continue
Tff7b72if Te6edf3is_allowed_data_image_hrefTb4b4b4(Te6edf3valTb4b4b4)Tb4b4b4:
Tff7b72continue
Tff7b72if Te6edf3is_remote_hrefTb4b4b4(Te6edf3valTb4b4b4) Tff7b72or Te6edf3valTff7b72.Td2a8ffstripTb4b4b4(Tb4b4b4)Tff7b72.Td2a8fflowerTb4b4b4(Tb4b4b4)Tff7b72.Td2a8ffstartswithTb4b4b4(Ta5d6ff"Ta5d6ffdata:Ta5d6ff"Tb4b4b4)Tb4b4b4:
Te6edf3strippedTff7b72.Td2a8ffappendTb4b4b4(Ta5d6ff"Ta5d6ffremote_hrefTa5d6ff"Tb4b4b4)
Tff7b72del Te6edf3propsTb4b4b4[Te6edf3keyTb4b4b4]
Tff7b72for Te6edf3v Tff7b72in Te6edf3objTff7b72.Td2a8ffvaluesTb4b4b4(Tb4b4b4)Tb4b4b4:
Te6edf3_strip_geojson_remote_urlsTb4b4b4(Te6edf3vTb4b4b4, Te6edf3strippedTb4b4b4)
Tff7b72elif Tffa657isinstanceTb4b4b4(Te6edf3objTb4b4b4, Tffa657listTb4b4b4)Tb4b4b4:
Tff7b72for Te6edf3item Tff7b72in Te6edf3objTb4b4b4:
Te6edf3_strip_geojson_remote_urlsTb4b4b4(Te6edf3itemTb4b4b4, Te6edf3strippedTb4b4b4)
Tff7b72def Td2a8ffsanitize_geojson_bytesTb4b4b4(Te6edf3dataTb4b4b4: Tffa657bytesTb4b4b4) Tff7b72-Tff7b72> Te6edf3SanitizeResultTb4b4b4:
Tff7b72tryTb4b4b4:
Te6edf3text Tff7b72= Te6edf3dataTff7b72.Td2a8ffdecodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72except Tf85149UnicodeDecodeError Tff7b72as Te6edf3excTb4b4b4:
Tff7b72raise Te6edf3GeoValidationErrorTb4b4b4(Ta5d6ff"Ta5d6ffinvalid_encodingTa5d6ff"Tb4b4b4) Tff7b72from T7ee787exc
Tff7b72tryTb4b4b4:
Te6edf3obj Tff7b72= Te6edf3jsonTff7b72.Td2a8ffloadsTb4b4b4(Te6edf3textTb4b4b4)
Tff7b72except Te6edf3jsonTff7b72.Td2a8ffJSONDecodeError Tff7b72as Te6edf3excTb4b4b4:
Tff7b72raise Te6edf3GeoValidationErrorTb4b4b4(Ta5d6ff"Ta5d6ffinvalid_geojsonTa5d6ff"Tb4b4b4) Tff7b72from T7ee787exc
Te6edf3strippedTb4b4b4: Tffa657listTb4b4b4[Tffa657strTb4b4b4] Tff7b72= Tb4b4b4[Tb4b4b4]
Te6edf3_strip_geojson_remote_urlsTb4b4b4(Te6edf3objTb4b4b4, Te6edf3strippedTb4b4b4)
Te6edf3count Tff7b72= T79c0ff0
Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3objTb4b4b4, Tffa657dictTb4b4b4)Tb4b4b4:
Te6edf3t Tff7b72= Te6edf3objTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fftypeTa5d6ff"Tb4b4b4)
Tff7b72if Te6edf3t Tff7b72== Ta5d6ff"Ta5d6ffFeatureCollectionTa5d6ff"Tb4b4b4:
Te6edf3feats Tff7b72= Te6edf3objTff7b72.Td2a8ffgetTb4b4b4(Ta5d6ff"Ta5d6fffeaturesTa5d6ff"Tb4b4b4)
Te6edf3count Tff7b72= Tffa657lenTb4b4b4(Te6edf3featsTb4b4b4) Tff7b72if Tffa657isinstanceTb4b4b4(Te6edf3featsTb4b4b4, Tffa657listTb4b4b4) Tff7b72else T79c0ff0
Tff7b72elseTb4b4b4:
Te6edf3count Tff7b72= T79c0ff1
Tff7b72if Tff7b72not Te6edf3strippedTb4b4b4:
Tff7b72return Te6edf3SanitizeResultTb4b4b4(
Te6edf3dataTff7b72=Te6edf3dataTb4b4b4, Tffa657formatTff7b72=Ta5d6ff"Ta5d6ffgeojsonTa5d6ff"Tb4b4b4, Te6edf3strippedTff7b72=Tb4b4b4[Tb4b4b4]Tb4b4b4, Te6edf3feature_countTff7b72=Te6edf3count
Tb4b4b4)
Te6edf3out Tff7b72= Te6edf3jsonTff7b72.Td2a8ffdumpsTb4b4b4(Te6edf3objTb4b4b4, Te6edf3separatorsTff7b72=Tb4b4b4(Ta5d6ff"Ta5d6ff,Ta5d6ff"Tb4b4b4, Ta5d6ff"Ta5d6ff:Ta5d6ff"Tb4b4b4)Tb4b4b4)Tff7b72.Td2a8ffencodeTb4b4b4(Ta5d6ff"Ta5d6ffutf-8Ta5d6ff"Tb4b4b4)
Tff7b72return Te6edf3SanitizeResultTb4b4b4(
Te6edf3dataTff7b72=Te6edf3outTb4b4b4, Tffa657formatTff7b72=Ta5d6ff"Ta5d6ffgeojsonTa5d6ff"Tb4b4b4, Te6edf3strippedTff7b72=Te6edf3strippedTb4b4b4, Te6edf3feature_countTff7b72=Te6edf3count
Tb4b4b4)
Tff7b72def Td2a8ffsanitize_geo_bytesTb4b4b4(
Te6edf3dataTb4b4b4: Tffa657bytesTb4b4b4,
Tff7b72*Tb4b4b4,
Te6edf3hinted_formatTb4b4b4: Tffa657str Tff7b72| Tff7b72None Tff7b72= Tff7b72NoneTb4b4b4,
Tb4b4b4) Tff7b72-Tff7b72> Te6edf3SanitizeResultTb4b4b4:
Tff7b72if Tff7b72not Te6edf3dataTb4b4b4:
Tff7b72raise Te6edf3GeoValidationErrorTb4b4b4(Ta5d6ff"Ta5d6ffempty_fileTa5d6ff"Tb4b4b4)
Te6edf3fmt Tff7b72= Te6edf3sniff_formatTb4b4b4(Te6edf3dataTb4b4b4, Te6edf3hinted_formatTb4b4b4)
Tff7b72if Te6edf3fmt Tff7b72== Ta5d6ff"Ta5d6ffgeojsonTa5d6ff"Tb4b4b4:
Tff7b72return Te6edf3sanitize_geojson_bytesTb4b4b4(Te6edf3dataTb4b4b4)
Tff7b72if Te6edf3fmt Tff7b72== Ta5d6ff"Ta5d6ffkmlTa5d6ff"Tb4b4b4:
Tff7b72return Te6edf3sanitize_kml_bytesTb4b4b4(Te6edf3dataTb4b4b4, Te6edf3zip_local_okTff7b72=Tff7b72FalseTb4b4b4)
Tff7b72if Te6edf3fmt Tff7b72== Ta5d6ff"Ta5d6ffkmzTa5d6ff"Tb4b4b4:
Tff7b72return Te6edf3sanitize_kmz_bytesTb4b4b4(Te6edf3dataTb4b4b4)
Tff7b72raise Te6edf3GeoValidationErrorTb4b4b4(Ta5d6ff"Ta5d6ffunknown_formatTa5d6ff"Tb4b4b4)
Served by rngit 1.5.4 - Generated in 0.06s